"""某班级有3门课程的考试成绩（数学、物理、化学），数据以嵌套字典形式存储。要求完成以下任务：

原始数据重构
用列表推导式生成原始成绩数据，格式为：
python
students = [
    {"name": "Alice", "math": 85, "physics": 90, "chemistry": 78},
    {"name": "Bob", "math": 76, "physics": 88, "chemistry": 92},
    {"name": "Charlie", "math": 92, "physics": 85, "chemistry": 88}
]
数据转换
将上述列表转换为字典，键为学生姓名，值为包含三科成绩的元组，要求：
使用字典推导式
元组按 数学, 物理, 化学 顺序排列

成绩筛选
用集合推导式找出所有数学成绩≥85的学生姓名集合。

统计计算
对筛选后的学生：
计算他们的物理成绩平均值（保留两位小数）
找出化学成绩最高分的学生姓名

数据合并
新增一个学生数据：{"name": "David", "math": 88, "physics": 95, "chemistry": 85}，将其合并到原始字典中，要求：
确保不覆盖原有数据"""

# 1 推导式 ，条件表达式
students = [{"name": name,
             "math": 85 if name == "Alice" else(76 if name == "Bob" else 92),
             "physics":90 if name=="Alice" else(88 if name=="Bob" else 85),
             "chemistry":78 if name=="Alice" else(92 if name=="Bob" else 88),
            }
            for name in ["Alice", "Bob", "Charlie"]]
for x in students:
    print(x)
# 2列表嵌套字典转成字典嵌套元组
dict1={x["name"]:(x["math"],x["physics"],x["chemistry"]) for x in students}
print(dict1)
# 3用集合推导式找出所有数学成绩≥85的学生姓名集合。
set01={x["name"] for x in students if x["math"]>=85 }
print(set01)
# 4计算他们的物理成绩平均值（保留两位小数）

sum=0
for x in students:
    if x["name"] in set01:
        sum+=x["physics"]
print("%.2f" %(sum/len(set01)))
# 找出化学成绩最高分的学生姓名
max_che=max((x["chemistry"]) for x in students)
max_list=[x["name"] for x in students if x["chemistry"]==max_che]
print(max_list)

# 新增一个学生数据：{"name": "David", "math": 88, "physics": 95, "chemistry": 85}，将其合并到原始字典中，要求：
students.append({"name": "David", "math": 88, "physics": 95, "chemistry": 85})
print(students)
